“霸面”后我进了网易游戏(技术面试题问答全还原)
“我相信一万小时定律。”
人物介绍
叶泳豪
拼客学院-CCIE第10期学员 广东工业大学14届学生
2015年1月参加拼客学院CCIE魔鬼训练营
2017年4月11日拿到网易游戏实习offer
前言
我在2月20号左右开始参加春招,到4月11号拿到网易游戏实习offer,这短短的一个月过得却是无比的揪心,但最后还是告一段落了。我自己的学习方向,与网易游戏的运维岗达到了90%以上的匹配,加之本身也非常喜欢网易游戏开放的工作环境,所以在春招中第一个便面试了网易,印象深刻可想而知。下面就来分享一下这次的面试经历,希望给正在参加春招的以及未来备战秋招的小伙伴们带来一定的帮助。
内推
从网易游戏开始招聘,杰哥就把我的简历内推了过去。很快,身边的小伙伴陆续收到了面试通知,而我却迟迟未收到音讯,我就知道自己被刷了下来。心有不甘,网易游戏因其开放的环境和雄厚的实力深深吸引着我,我知道是时候要主动出击了。于是,在听完京东宣讲会的那个晚上,我厚着脸皮拨通了HR的电话,晓之以理动之以情地说了一大堆,希望能够争取一个面试机会。回到宿舍,又往招聘邮箱发去了自己的项目资料,同样不漏动情的话语。做好了这些铺垫,准备跟着小伙伴去面试(霸面)的时候,网易十分及时地给我打了面试电话,我第一步算是成功了!那会也的确感受到了一个有人情味的网易。
一面
3月29号的一面,可以说是一个很讲究技术的面试,两个面试官,持续了一个小时左右的面试过程,问的几乎都是技术问题,没有一丁点的题外话。
1、你能介绍下你这个《交换机统一认证与管理系统》吗?
(PS.这是简历上的项目资料,一上来就问项目了。)
因为我提前准备好了这个项目的资料,所以我马上把打印好的资料给两位面试官递了过去,然后再详细介绍。随后,面试官追问了很多认证上的问题,比如认证的过程。由于整个系统依赖于Radius协议的实现,面试官最后的问我,你熟悉这个协议吗?我说,过了太久不熟悉了(两年前的项目),但是我会配置,然后就pass了。
2、你这个《交换机监控系统gdutNMS》是怎么实现的,能介绍下吗?
(PS.还是问项目,不过这个就比较久远了,其中的技术面试官好像比较感兴趣。)
虽然gdutNMS是在去年开发的,但由于印象深刻,于是我就按照「为什么要开发这个系统-开发的流程-用到哪些技术-实际意义」的思路给面试官讲了一下。因为监控数据的获取通过SNMP协议来获取的,所以也介绍了SNMP和OID。
3、你这个系统是用什么数据库来储存数据的?
MongoDB。
4、为什么会用MongoDB?
主要是出于数据处理的方便,它是NoSQL,基于key-value,跟Python使用起来一样方便。
5、那你在Python中使用了什么库来对接MongoDB?
用了pymongo和mongoengin,前者比较原生,后者orm就会Python一些。
6、那你的数据是怎么处理的呢?
我是把一台交换机的数据保存在一个Python字典里,然后再写入MongoDB,因为Python对MongoDB的操作跟字典类似。
7、也就是每台交换机一条数据?
每台交换机都有CPU、内存、温度等不同的数据,因此每台交换机都会有多条数据。
8、你的数据多久取一次?
每台交换机都是60秒定时去取上面说的这些数据。
9、那你600台交换机,就是百万级别的数据了。
有这么夸张吗?(我还没计算过)
10、不是吗?
额……
11、那你的MongoDB有没有做索引呢?
没有做索引的。
12、百万级别的数据你不做索引,那你的查询很慢啊。
但是我的交换机数据是每台交换机一个collection的,不是所有交换机数据都放在一个collection里的。(延伸的问题:数据库是不是做了单实例等。)
13、噢!原来是这样。那你每台交换机的数据用什么区分呢?
MongoDB本身有ObjectID来区别,但我为了数据处理的方便,用了一个date的key。
14、那如果因为网络问题你某一分钟拿不到数据,你怎么处理?
那这样的话数据库里就没有这一分钟的数据了。
15、但是你做数据展示的时候怎么处理呢?
这也是我当初最纠结的,最后我的解决方案是,从现在这一分钟开始,取往前60分钟的数据,因为数据展示就是一小时的,如果某一分钟没有数据,就用0值取代,但是时间还是要加上去。
16、你的web框架是什么?
(PS.前面问了监控系统的后端程序,接下来问web框架)
我用的是flask来实现的。
17、那你知道MTV框架吗?给我说说MTV的含义。
M:models,数据库处理 T:Templates,前端模板 V:views,视图函数
因为自己做Python Web差不多两年了,所以还是挺熟悉的,接下来便举了个例子,用户有请求时,各个模块之间是怎样协同处理完成工作的。(面试官挺满意这个回答的。)
18、你的前端都用了哪些框架?
JavaScript用了Jquery的库,模式一块用了Bootstrap,出图用了Highcharts。
19、为啥?
主要是为了节省前端开发的时间,因为我也不是专业做前端开发的。
20、也就是说前端你也还是挺熟的?
JavaScript/Jquery/HTML/CSS/Bootstrap/Highcharts都可以使用的。
(PS.因为2015年就接触了前端开发了,所以使用上还是挺熟悉的,回答也是挺有底气的,对于这些知识的细分,面试官也就没有再问了。)
21、那你知道Angular JS吗?
(PS.Angular JS属于比较前沿的技术了,这个我真的不知道)
曾经听过,但是不了解使用。
22、你知道RestFul API吗?
(PS.RestFul API在2016年第一次做Flask的项目的时候就接触过了,最近完成的Spyinux也有使用)
嗯,传统一个http请求给你返回一整个html页面,但是RestFul可以给你返回一些资源数据,比如用Json封装的数据。
23、那你知道http请求方法吗?
(PS.我愣了一会没反应过来,没想到这个也问,所以重新确认了一下这个问题。)
嗯,常用的是get和post,比如post,我自己在做提交表单功能时就用到了,因为post可以携带用户的数据。
24、你怎么回去学习Openstack呢?
曾经参加比赛有接触过,自己也比较感兴趣。
25、那有动手搭过吗?
有的,为此我还买了一台性能比较好的服务器,最近也把compute节点搭建出来了。(可能听了我自己有搭建过Openstack,所以也没有继续往下追问了。)
26、你对网络很熟悉吧,跟我讲一下OSPF。
我是从OSPF的应用部署的角度去回答这个问题的,因为广工校园网的三成交换机以上用的路由协议都是OSPF,所以就直接拿这个案例跟面试官说了一下,也没有继续追问。
27、你能跟我说一下OSPF和BGP的区别吗?
我举了广工和华工两个学校的网络例子,两个AS,他们内部可能就需要用OSPF实现网络互通了,但假设两个网络的路由条目要分别传给对方,就需要使用BGP了,因为BGP可以承载非常多的路由条目,所以一般可以看到BGP用于运营商之间。
28、为什么BGP可以传递非常多的路由条目呢?
这个跟BGP本身的设计有关,因为BGP最初就是设计用来在AS之间传递数量非常大的路由条目的,而OSPF本身的数据包格式就决定了它没有办法实现。
29、你确定是这样子的吗?
我说我们没有去查过,但是我猜是这样子的,就像你开发一些软件一样,你的软件架构决定了你可以处理多大的数据。
30、MPLS跨域知道吗?
(PS. 前面讲BGP的时候有讲过MPLS有可能用在运营商中,所以又问了这个,不过我已经忘记了。)
不记得了。
31、那OSPF和BGP的选路有什么不同?
OSPF是SPF算法,讲了一下SPF的过程;BGP是13条选路原则,但是我表示具体的已不记得了,面试官就说这个没关系。
32、前面提到你的gdutNMS服务器,如果服务器挂了你有办法知道吗?
我的前端页面打不开了。
33、那你有办法查出是哪里出了问题吗?
正常情况下其他软件是可以查日志的,但是我这个没有做日志的记录。
34、那就是说出问题没办法查明原因了?(面试官当时是说历史问题)
我表明这是我系统是的不足。
35、你这个gdutNMS的资源占用情况会不会很多,在Linux服务器怎么查看?
不会很多,如果资源多的话,我用top命令就可以看到它在前面了。
36、你shell脚本应该挺熟的吧?
(PS.其实并不是很熟,因为实际上我很少写shell脚本。)
还行吧,基本的逻辑判断还是可以写的。
37、你有什么问题要问的吗?
我就问了一下网易游戏这边自动化平台的情况,然后得知也是在用Python Flask做开发,还自己写了MongoDB的一套RestFul API。
以上大概就是一面的内容了,可以看出,网易游戏的面试官比较喜欢问项目,而且喜欢深究其中的技术和问一些前沿的问题,例如MongoDB/RestFul API等。另外,其中的一位面试官在整个过程中不停地看笔记本上的内容,估计当时是在证实我简历上的东西,比如博客、Github等。
面试完后,面试官告诉我,如果有消息,5天内会有通知,出了面试的地方后,其中一个面试官又对我重复了一遍,不过他是这样说的:5天内会有人通知你的。我知道我一面是稳了。
二面
二面安排在清明节后,4月7号。
我是4号回到学校的,原本6号可以好好准备一下,谁知那天早上却发现自己发烧了,加上嗓子疼,7号那天的面试状态可以说是很糟糕的。幸好二面更多的是聊自己的情况,技术问题不多,而且只有一个面试官。后来得知,那位面试官在网易工作了十几年了。
1、自我介绍
2、问项目上的问题:用了什么数据库?
我说用了MongoDB,接下来就是一堆与MongoDB有关的问题,由此我就体会到网易很喜欢MongoDB。除此之外,还问了安全性的问题,比如有什么方法可以加固MongoDB服务器的安全性,我主要从以下几点回答:
(1)服务器本身,最小化安装
(2)如果只是做MongoDB的服务器,除了SSH等常用服务,其他全部关掉
(3)禁止Root用户远程登录
(4)可以把MongoDB的默认端口号改了
(5)把SSH的端口号也改了
(6)用chattr锁定一些系统的关键命令
(7)把一些很关键的命令如rm等藏起了
(8)防火墙(主要是硬件上)
(PS.面试官后来就调侃我,是不是没有给MongoDB设置密码,我也笑了,的确没有。)
然后面试官又问我使用MongoDB有没有遇到什么问题?我说数据量大,因为没有做索引所以查询很慢,最后我的解决方案是,定时删除整个数据库,因为历史数据在我的场景中用处不大。
接下来就是开放性问题了
3、你是怎么规划你的学习路线的?
(PS.我的简历上学习路线是网络-Linux-Python)
大概介绍了一下这几年自己的学习过程,包括培训的一些经历。
4、你是怎么学习Python的?
主要通过运用在校园网管理中来学习,也就是从项目中积累。
5、你看了那些书籍?
网络、Linux、Python都一一做了介绍。
6、你对运维的理解?
大概说了一些。
7、你觉得运维最需要什么样的品质能力?
我当时回答的是,要学习独立思考去解决问题,因为运维过程中,遇到的很多问题可能都是你从未遇到过的。
8、你觉得公有云会代替运维吗?
不会,很多企业不会把重要数据放在云上。
9、当前你最想从事什么样的工作?
运维。
10、当初你为什么要做开源项目?(指简历上写的Blog-mini)
说了各种原因。
11、你在这个过程中遇到什么困难?
主要是系统兼容性问题,比如能不能同时在Ubuntu和CentOS上运行,面试官说具体一点,我就举了MongoEngine这个库在Python2.6上运行有哪些问题,怎么解决这个例子。
12、你对你做过的项目有什么不满意的?
讨论了一下Python线程失控的一些问题,并提出了自己的一些解决方案,附上一些例子来说明。
13、你有什么问题?
自己相应地问了几个问题。
整个过程的时间与一面差不多,不过更多的是轻松地聊聊人生,尽管如此,也不能慌。大家都知道,二面把握好了,offer就有望了。
HR姐姐电话
4月11号晚上收到电话,当时又喝了点酒,所以非常开心。终于拿下人生的第一个offer了!
写在后面
整个过程下来,最大的感想就是,有时候不是实力的问题,很多时候,你还需要有面试的机会。如果连机会都没有,又如何向别人展示自己的实力呢?在这里,我真的十分感想杰哥,感谢拼客,提供了这样的一个平台让我有机会进入到这些名企。另外,也特别感谢卓文师兄和楚媛师姐,他们在网易游戏整个面试过程中给了我莫大的鼓励!
找实习的这段日子,压力尽管很大,但是坚守前线的小伙伴们一定要撑住!既然都这么棒了,也坚持了这么久,咬咬牙,肯定会拿到一份满意的offer的。
关于拼客
接触拼客,是从大一的课堂上无意中扫到一个二维码开始的。那时候刚进网管队的我,对网络技术知识的渴望远远超过了课堂知识。正好那时拼客有CCNA的公开课,上课前便联系了一下老师(其实当时就是杰哥在做公关),问没有基础能学会这个公开课吗,杰哥说没有问题,于是就直接去听了公开课。(现在回想起来,当时公关都是杰哥亲自在做,好幸福啊!)当时家里人还担心我是不是进了传销,也是,毕竟是免费的公益IT活动,当时全国能有多少呢?
(当时的公开课证书,如今一直保留着)
有了公开课的基础,2015年1月-2015年5月,我参加了CCIE魔鬼训练营第10期。在这段时间里,我不仅学习了扎实的网络技术知识,对网络有了一个比较直观的理解,而且也认识了很多优秀的师兄师姐,他们教了我许多面试上的方法,使我受益匪浅。
因为最近的求职,我重新回到了拼客,与树仪、雨晴等拼客小伙伴一起并肩作战。过了两年,原本以为杰哥早就忘记我了,没想到还记得!每次面试前夕,都有杰哥这个坚实的身影出现,让我踏实了不少。几年时间,回想起来,我与拼客,其实有着深深的缘分。
继续前行
原本很贪心地想过,自己要刷很多名企offer,其实,找到最适合自己的一份实属难得了。未来还很长,我们一起加油吧!
路漫漫其修远兮,吾将上下而求索!
课程推荐
拼客学院王牌旗舰课程
“理论+实战”4个月集中式魔鬼训练,
带你零基础入门,变身网络安全工程师。
加上校招实习求职辅导,
实现真正一站式求职培训服务。
让你在校招大军中脱颖而出,斩获名企offer!
(ps:点击以下海报获取更多课程详情~)
✔ 小班课程
✔ 限额15名
✔ 先到先得
✔0学费0基础无忧入学
长按二维码,撩拼客小助手~
拓展阅读
点击关键词,获取更多内容。
▼